package edu.nf.llmtest.service;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

/**
 * LlmService
 * 职责：统一封装对 SiliconFlow 大模型的调用（Qwen / DeepSeek / GLM 等），
 *      1. 构造请求体
 *      2. 发送 POST 请求到 /chat/completions
 *      3. 提取 choices[0].message.content
 *      4. 记录 prompt 与 output 到本地日志
 *
 * 使用方式：在任何 Controller 中注入 @Autowired LlmServiceImpl llmService，
 * 调用 llmService.call(systemPrompt, userPrompt) 即可返回 Mono<String>。
 *
 * @author bin
 * @since 2025/9/28
 */
public interface LlmService {
    /**
     * 调用大模型并返回原始字符串（异步）
     * @param systemPrompt 系统级提示词（角色设定）
     * @param userMessage   用户级提示词（真实问题）
     * @return Mono<String> 模型返回的原始内容，永远不会为 null
     */
    Flux<String> callStream(String sessionId, String systemPrompt, String userMessage,Integer userID);

    /**
     * 智能生成标题
     * @param content 输入内容
     * return 标题
     * */
    Mono<String> generateTitle(String content , Integer userId);
}
